package com.example.smartpark.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.smartpark.dto.ParkingLotAddDTO;
import com.example.smartpark.dto.ParkingLotUpdateDTO;
import com.example.smartpark.model.ParkingLot;
import com.example.smartpark.vo.ParkingLotVO;

/**
 * 停车场服务接口
 */
public interface ParkingLotService extends IService<ParkingLot> {

    /**
     * 分页获取停车场列表
     *
     * @param page 页码
     * @param size 每页数量
     * @param name 停车场名称（可选）
     * @param status 状态（可选）
     * @return 分页停车场列表
     */
    IPage<ParkingLotVO> getParkingLotPage(int page, int size, String name, Integer status);

    /**
     * 获取停车场详情
     *
     * @param id 停车场ID
     * @return 停车场详情
     */
    ParkingLotVO getParkingLotById(Integer id);

    /**
     * 添加停车场
     *
     * @param parkingLotAddDTO 添加停车场DTO
     * @return 添加的停车场信息
     */
    ParkingLotVO addParkingLot(ParkingLotAddDTO parkingLotAddDTO);

    /**
     * 更新停车场信息
     *
     * @param id 停车场ID
     * @param parkingLotUpdateDTO 更新停车场DTO
     * @return 更新后的停车场信息
     */
    ParkingLotVO updateParkingLot(Integer id, ParkingLotUpdateDTO parkingLotUpdateDTO);

    /**
     * 删除停车场
     *
     * @param id 停车场ID
     * @return 是否删除成功
     */
    boolean deleteParkingLot(Integer id);

    /**
     * 检查停车场名称是否已存在
     *
     * @param name 停车场名称
     * @param excludeId 排除的停车场ID（用于更新时）
     * @return 是否存在
     */
    boolean checkNameExists(String name, Integer excludeId);

    /**
     * 更新停车场可用车位数
     *
     * @param id 停车场ID
     * @return 是否更新成功
     */
    boolean updateAvailableSpaces(Integer id);
} 